package com.microinvest.util;
//  线程本地工具类，封装对 ThreadLocal 的常用操作。
//  该工具类提供了在当前线程中存储和获取数据的便捷方法。
//  适用于每个线程需要维护独立的上下文数据（如用户信息、事务等）。
//  注意：
//  1. 使用完 ThreadLocal 后务必调用 remove() 方法，防止内存泄漏。
//  2. 静态工具类设计，不能被实例化。

public class ThreadLocalUtil<T> {


    private static final ThreadLocal<Object> THREAD_LOCAL = new ThreadLocal<>();


//    私有化构造方法，防止工具类被实例化。

    private ThreadLocalUtil() {
        throw new UnsupportedOperationException("Utility class");
    }

//     获取当前线程中存储的值。
//     <T> 返回值的类型，由调用方决定。
//     return 当前线程存储的值，如果未设置则返回 null。
    @SuppressWarnings("unchecked")
    public static <T> T get() {
        return (T) THREAD_LOCAL.get();
    }


//     向当前线程中存储一个值。
//     value 要存储的值。
    public static void set(Object value) {
        THREAD_LOCAL.set(value);
    }


//     清除当前线程中的值。
//     使用线程池时，线程可能被复用。为避免数据污染，
//     每次线程结束使用后，应调用此方法清理。
    public static void remove() {
        THREAD_LOCAL.remove();
    }
}
